Layered Architecture
https://gyazo.com/f5e9f0e4cdda56af9c97c0e133f47a47
レイヤーのすり抜けを許可するやつ
レイヤーのスキップを許可しないやつ
何もしない層をただ通過する感じのやつ
形骸的な無意味な層があるやつ
個々のpackageで必ずしもLayerを共通にする必要はないと思う
例えば、feature AではUseCase層があるが、feature Bではない、とかでも良い
必要になったら層を付け足せば良い
何もしていない層があっても無駄
記述量が増えるだけでなんの嬉しさも享受しない
関数型指向のLayered Architecture
Layerを分けるところまでは同じだが、各層で「型」「関数」の2層に分けるのが異なる
よってLayerは、2倍になる
この時点ですでに面白いが、型と関数に分けたことによって、層の順序を入れ替えることができ、それによって依存の向きを完璧に1方向に揃えられる